/*
 * @Author: 大国男儿 7824741+lc2677@user.noreply.gitee.com
 * @Date: 2022-10-26 10:19:54
 * @LastEditors: 大国男儿 7824741+lc2677@user.noreply.gitee.com
 * @LastEditTime: 2022-10-28 09:55:37
 * @FilePath: \echart-use\练习4-websocket\koa_server\service\websocket_service.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
const path = require('path')
const fileUtils = require('../utils/file_utils')

const WebSocket = require('ws')
// 创建WebSocket服务器的对象
const wss = new WebSocket.Server({
    port: 9998
})

// 服务端开启监听
module.exports.listen = () => {
 // 对客户端的连接事件监听
 // client:代表的是客户端的连接socket对象
    wss.on('connection', client => {
    console.log('有客户端连接成功了。。')
    // 对客户端的连接对象进行message事件的监听
    // msg: 由客户端发给服务器的数据
    client.on('message', async msg => {
       console.log('客户端发消息了：' + msg)
    //    发送数据字段约定
       let payload = JSON.parse(msg)
       const action = payload.action
       if (action === 'getData') {
        let filePath = '../data/' + payload.chartName + '.json'
        payload.chartName // trend seller map stock rank pie
        filePath = path.join(__dirname, filePath)
        // getFileJsonData返回的是promise对象
        const ret = await fileUtils.getFileJsonData(filePath)
        // 需要在服务端获取到数据的基础之上，增加一个data字段
        // data所对应的值，就是某个json文件的内容
        payload.data = ret 
        client.send(JSON.stringify(payload))
       } else {
        // 将所接收的数据转发给每一个处于连接状态的客户端
        wss.clients.forEach(client => {
            client.send(msg.toString('utf8'))
        })

       }
       // 由服务器向客户端发送数据
    //    client.send('hello 客户端')
    })
})
}
